//package com.boarsoft.boar.gateway.router;
//
//import java.io.IOException;
//import java.util.Properties;
//import java.util.Set;
//import java.util.concurrent.ConcurrentHashMap;
//
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//
//import com.boarsoft.boar.gateway.GatewayConfig;
//import com.boarsoft.common.Util;
//import com.boarsoft.config.core.Configable;
//import com.boarsoft.soagov.route.ServiceRouter;
//
//public class CanaryRouterImpl<T> implements ServiceRouter, Configable {
//	private static final Logger log = LoggerFactory.getLogger(CanaryRouterImpl.class);
//
//	/** 金丝雀开关 */
//	public static volatile boolean canary;
//	/** 可以让不同的测试人员走不同的测试版本 */
//	public static final Set<String> testerSet = ConcurrentHashMap.newKeySet();
//	/** { Key: 服务编号-服务消费者（客户端）版本号， Value：服务提供者（Web应用）版本号 } */
//	public static Properties canaries = new Properties();
//
//	@Override
//	public void config() {
//		// 金丝雀开关
//		String s = GatewayConfig.getProperty("canary", "false");
//		log.info("Set canary = {}", s);
//		canary = Boolean.valueOf(s);
//		// 测试人员白名单
//		testerSet.clear();
//		String[] wl = GatewayConfig.getProperty("testers", "").split(",");
//		for (String w : wl) {
//			testerSet.add(w);
//		}
//		// 读取金丝雀版本号
//		ClassLoader cl = GatewayConfig.class.getClassLoader();
//		try {
//			log.info("Load conf/canaries.properties ...");
//			canaries.load(cl.getResourceAsStream("conf/canaries.properties"));
//		} catch (IOException e) {
//			log.error("Error on load conf/canaries.properties.", e);
//		}
//	}
//
//	@Override
//	public String getProvider(String sc, String cv) {
//		CanaryRequest cr = (CanaryRequest) ro;
//		String uc = cr.getUserCode();
//		String cv = cr.getClientVersion();
//		// 如果金丝雀开关 打开，且客户号不为空，并位于白名单中
//		if (canary) {
//			if (Util.strIsNotEmpty(uc) && testerSet.contains(uc)) {
//				// 取每个服务的金丝雀版本号
//				String pv = canaries.getProperty(sc);
//				if (Util.strIsNotEmpty(pv)) {
//					// 从此服务的金丝雀版本实例中选一个
//					return this.select1(sc, pv);
//				}
//			}
//		}
//		// 默认根据客户端版本号获取配置的服务提供者
//		return this.getProvider(sc, cv);
//	}
//
//	@Override
//	public String select1(String pv) {
//		// TODO Auto-generated method stub
//		return null;
//	}
//
//	@Override
//	public String select1(String sc, String pv) {
//		// TODO Auto-generated method stub
//		return null;
//	}
//
//	@Override
//	public String getProvider(Object req) {
//		// TODO Auto-generated method stub
//		return null;
//	}
//}